//
// Created by LiuYou on 2021/5/9.
//

#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <cstring>
#include <cerrno>

/**
 * @brief 使用static修饰函数
 *
 * 使用static修饰函数表示禁止函数外部扩展。
 *
 * @param argv
 * @return
 */
static __off_t fileLength(char* const* argv);

int main(int argc, char** argv) {
    if (argc < 2) {
        std::fprintf(stderr, "Usage...\n");
        std::exit(1);
    }

    std::fprintf(stdout, "文件大小为: %ld\n", fileLength(argv));


    return 0;
}

static __off_t fileLength(char* const* argv) {
    // TODO 注意: 这里的struct是一定要有的, 那也正好这这里明确一下:
    //  使用C式的结构体(标准库或者系统调用)中提供的结构体一定都带上 struct 。
    struct stat fileStatus{};
    if (stat(argv[1], &fileStatus) < 0) {
        fprintf(stderr, "stat(): %s\n", strerror(errno));
        exit(1);
    }
    __off_t fileSize = fileStatus.st_size;
    return fileSize;
}
